home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / Sep / di9809am / Compont / Versions / Ver_1.1 / TAPIcomp.pas < prev   
Pascal/Delphi Source File  |  1998-06-26  |  39KB  |  1,007 lines

  1. {+--------------------------------------------------------------------------+
  2.  | Component:   TkkamTAPI
  3.  | Created:     6/3/98 6:35:50 PM
  4.  | Author:      Alan Moore and Ken Kyler
  5.  |              developed for article in Delphi Informant; September 1998
  6.  | Copyright    1998, all rights reserved.
  7.  | Description: TAPI non-visual component for basic Telephony functionality
  8.  | Version:     1.1
  9.  | Modification History:  Modifications by Ken Kyler and Alan Moore
  10.  +--------------------------------------------------------------------------+}
  11. unit TAPIcomp;  { TkkamTAPI component. }
  12. { Created 6/3/98 6:35:51 PM }
  13. { Eagle Software CDK, Version 3.02 Rev. F }
  14.  
  15. interface
  16.  
  17. uses
  18.   Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms,
  19.   Dialogs, Tapi, Menus, StdCtrls, ExtCtrls;
  20.  
  21. type
  22.   // Thread Action Type
  23.   TThreadAction = (taSuspend, taResume, taTerminate);
  24.  
  25.   // Comm Event Type
  26.   TCommEvent = (tceDSR, tceDTR, tceCTS, tcePORT);
  27.  
  28.   // Event Types
  29.   TTapiUpdateEvent = procedure(sender : TObject; UpdateList : TStringList)
  30.      of object;
  31.   TCommThreadEvent = procedure(sender : TObject; ThreadAction : TThreadAction)
  32.      of object;
  33.   TCommEventProc = procedure (sender : TObject; ACommEvent : TCommEvent;
  34.                           AStatus : integer) of object;
  35.  
  36.   // Our Thread Class moved from separate unit
  37.   type
  38.   TCommStatus = class(TThread)
  39.   private
  40.     { Private declarations }
  41.     ThePort : THandle;
  42.     function GetPort : THandle;
  43.     procedure SetPort(Value : THandle);
  44.   protected
  45.     TheOwner: TComponent;
  46.     property APort : THandle
  47.       read  GetPort
  48.       Write SetPort;
  49.       procedure Execute; override;
  50.       procedure TriggerTapiCommEvent(Sender : TObject;
  51.                           CommEvent : TCommEvent; Status : integer);
  52.     public
  53.       constructor Init(Owner : TComponent; Suspended : Boolean;
  54.                         PortRead : THandle);
  55.   end;
  56.  
  57.   // constants for thread and modem lights
  58.   const
  59.   off = 0;
  60.   red = 1;
  61.   yellow = 2;
  62.   green = 3;
  63.  
  64. type
  65.   // Main TAPI Class
  66.   TkkamTAPI = class(TComponent)
  67.   private
  68.     FAnswerCalls: Boolean;
  69.     FPulseDialing: boolean;
  70.     FCountryCode: integer;
  71.     FVersion: integer;
  72.     { Private declarations }
  73.     FLineCallParams: TLineCallParams;
  74.     FLineTranslateOptions: DWord;
  75.     FExt: TLINEEXTENSIONID;
  76.     FlpTranslateOutput: LPLINETRANSLATEOUTPUT;
  77.     FPort: THandle;
  78.     FTAPI_Initialized: Boolean;
  79.     FAutoSelectLine: Boolean;
  80.     FDev: Integer;
  81.     FPhoneNumber: String;
  82.     FMediaMode: DWord;
  83.     FBearerMode: DWord;
  84.     FLineIsOpen: Boolean;
  85.     FAnswserCalls : boolean;
  86.     FOnCreateCallManager: TTapiUpdateEvent;
  87.     FOnShutdownManager: TTapiUpdateEvent;
  88.     FOnDestroyCallManager : TTapiUpdateEvent;
  89.     FOnFreeCallManager: TTapiUpdateEvent;
  90.     FOnEnumerateDevices: TTapiUpdateEvent;
  91.     FOnOpenLine: TTapiUpdateEvent;
  92.     FOnDial: TTapiUpdateEvent;
  93.     FOnCommThreadEvent: TCommThreadEvent;
  94.     FOnTriggerCommEvent: TCommEventProc;
  95.     FOnTAPIInit: TNotifyEvent;  { Defined in Classes unit. }
  96.     // The next three events will usually not need to be used but are included
  97.     // in case you want to take additional steps after these changes occur.
  98.     // Generally, you should communicate from the calling application to this
  99.     // component to effect each of these changes
  100.     FOnPhoneNumberChange: TNotifyEvent;  { Defined in Classes unit. }
  101.     FOnChangeMediaMode: TNotifyEvent;  { Defined in Classes unit. }
  102.     FOnChangeBearerMode: TNotifyEvent;  { Defined in Classes unit. }
  103.     function ReadPhoneNumber :  string;
  104.     procedure WritePhoneNumber(NewPhoneNumber : String);
  105.    protected
  106.     { Protected declarations }
  107.     InitResults : TStringList;
  108.     DeviceList: TStringList;
  109.     ShutdownResults: TStringList;
  110.     CreateManagerResults : TStringList;
  111.     DialResults: TStringList;
  112.     { Event triggers: }
  113.     procedure TriggerCreateCallManagerEvent; virtual;
  114.     procedure TriggerShutdownManagerEvent; virtual;
  115.     procedure TriggerDestroyCallManagerEvent; virtual;
  116.     procedure TriggerEnumerateDevicesEvent; virtual;
  117.     procedure TriggerTAPIInitEvent; virtual;
  118.     procedure TriggerOpenLineEvent; virtual;
  119.     procedure TriggerDialEvent; virtual;
  120.     procedure TriggerPhoneNumberChangeEvent; virtual;
  121.     procedure TriggerChangeMediaModeEvent; virtual;
  122.     procedure TriggerChangeBearerModeEvent; virtual;
  123.     procedure TriggerCommThreadEvent(ThreadAction : TThreadAction); virtual;
  124.     procedure TriggerCommEvent(Sender : TObject;
  125.                                ACommEvent : TCommEvent; AStatus : integer);
  126.   public
  127.     { Public declarations }
  128.     CommStatusThread : TCommStatus;
  129.     constructor Create(AOwner: TComponent); override;
  130.     destructor Destroy; override;
  131.     function TapiInitialize: Boolean;
  132.     procedure EnumerateDevices;
  133.     function ShutdownManager: Boolean;
  134.     function CreateCallManager: Boolean;
  135.     function CheckLineIsOpen: boolean;
  136.     procedure ChangePhoneNumber(NewPhoneNumber : string);
  137.     function Dial: String;
  138.     procedure ChangeMediaMode(MediaModeSelected : Integer);
  139.     procedure ChangeBearerMode(BearerModeSelected : Integer);
  140.     procedure ShowLineTranslateDialog(APhoneNum : string; AHandle :  THandle);
  141.     function OpenLine(AcceptCalls : boolean; var OpenMsg : string): boolean;
  142.     property APort : THandle read FPort Write FPort;
  143.     // Use a MaskEdit on main form to enter phone number with the following
  144.     // edit mask:  !9 \(999\) 000-0000;1;_
  145.     property PhoneNumber: String read ReadPhoneNumber write WritePhoneNumber;
  146.     property TAPI_Initialized: Boolean read FTAPI_Initialized write
  147.              FTAPI_Initialized;
  148.     property MediaMode: DWord read FMediaMode write FMediaMode;
  149.     property Dev: Integer read FDev write FDev;  { Public }
  150.     property LineIsOpen : boolean read FLineIsOpen Write FLineIsOpen;
  151.   published
  152.     { Published properties and events }
  153.     property AutoSelectLine: Boolean read FAutoSelectLine write FAutoSelectLine
  154.              default true;
  155.     property AnswerCalls : boolean read FAnswerCalls Write FAnswerCalls;
  156.     property PulseDialing : boolean read FPulseDialing Write FPulseDialing;
  157.     property OnCreateCallManager: TTapiUpdateEvent read FOnCreateCallManager write
  158.              FOnCreateCallManager;
  159.     property OnShutdownManager: TTapiUpdateEvent read FOnShutdownManager
  160.              write FOnShutdownManager;
  161.     property OnDestroyCallManager: TTapiUpdateEvent read FOnDestroyCallManager
  162.              write FOnDestroyCallManager;
  163.     property OnEnumerateDevices: TTapiUpdateEvent read FOnEnumerateDevices
  164.              write FOnEnumerateDevices;
  165.     property OnTriggerCommEvent : TCommEventProc read FOnTriggerCommEvent
  166.              Write FOnTriggerCommEvent;
  167.     property OnTAPIInit: TNotifyEvent read FOnTAPIInit write FOnTAPIInit;
  168.     property OnOpenLine: TTapiUpdateEvent read FOnOpenLine write FOnOpenLine;
  169.     property OnDial: TTapiUpdateEvent read FOnDial write FOnDial;
  170.     property OnPhoneNumberChange: TNotifyEvent read FOnPhoneNumberChange
  171.              write FOnPhoneNumberChange;
  172.     property OnChangeMediaMode: TNotifyEvent read FOnChangeMediaMode
  173.              write FOnChangeMediaMode;
  174.     property OnChangeBearerMode: TNotifyEvent read FOnChangeBearerMode
  175.              write FOnChangeBearerMode;
  176.     property OnCommThreadEvent : TCommThreadEvent read FOnCommThreadEvent
  177.              Write FOnCommThreadEvent;
  178.   end;  { TkkamTAPI }
  179.  
  180.   var
  181.     LineApp: HLINEAPP;
  182.  
  183. procedure Register;
  184.  
  185. implementation
  186.  
  187. const
  188.   Ver = $00010004;  // API version accepted (1.4) [Windows 95]
  189.  
  190. // Local Variables -------------------------------------------------------------
  191. var
  192.   TapiMessages : TStringList; // local string list for TAPI results
  193.   Devices : TStringList;      // local string list for available devices
  194.   AkkamTAPI : TkkamTAPI;  // local copy of the TAPI component
  195.   LocalNumDevs : Integer;  // local copy of number of devices
  196.   ALineIsOpen : boolean;   // local copy of line open status
  197.   ALine : HLine; // local copy of line
  198.   ACall : HCall; // local copy of call
  199.   APhoneNumber : str